/**************************************************************************** 
 * Meta，一个轻量级的静态分区Hypervisor 
 *
 * 版权(c) , 2022-
 *
 * 作者:
 *      Tupelo Shen <shenwanjiang2013@163.com>
 *
 * Meta是一个自由软件，你可以在遵循GNU GPLv2协议的条件下，重新修改并发布它。
 *
 ***************************************************************************/

#ifndef IPC_H
#define IPC_H

#include <meta.h>
#include <mem.h>

struct ipc {
    paddr_t     base;           /* ipc内存的基地址 */
    size_t      size;           /* ipc内存的大小 */
    size_t      shmem_id;       /* ipc共享内存的ID */
    size_t      interrupt_num;  /* ipc使用的中断数量 */
    irqid_t*    interrupts;    /* 中断数组 */
};

struct vm_config;

unsigned long ipc_hypercall(unsigned long arg0, unsigned long arg1, unsigned long arg2);
void        ipc_init(const struct vm_config* vm_config, bool vm_master);
struct shmem*    ipc_get_shmem(size_t shmem_id);

#endif /* IPC_H */
